Assembly instructions(80x86, Intel)

       Basic instruction
mov
;mov dest, src
mov al, [L1] ; AL(reg) L1
mov al, L1 ; AL(reg) L1
mov eax,$+7 ; eax=+7
movzx eax, ax ;ax eax (for unsigned)
movsx eax, ax ;ax eax (for signed)
cmp
cmp vleft, vright ;vleft-vright flag
    arithmetic
add eax, 4
sub bx, 10
inc ecx ;ecx++
dec dl ;dl—
;mul dest,source ;multiply for unsigned
;imul dest,source ;multiply for signed
;div dest,source ;divide for unsigned
;idiv dest,source ;divide for signed
;EDX:EAX + EBX:ECX
add eax, ecx ; 32 .
adc edx, ebx ; 32 .
;EDX:EAX - EBX:ECX
sub eax, ecx ; 32 .
sbb edx, ebx ; 32 .
;EDX:DAX */
mul eax ;edx:eax=eax*eax
div ebx ;edx=edx:eax%ebx
clc ;clear carryflag
    shift
logic shift
shl ax,1
shr ax,1
arithmetic shift
sal ax,1
sar ax,1
rotation shift
rol ax,1
ror ax,1
        preproccesor
equal
symbol equ value ;symbol value , ( )
define
%define SIZE 100 ;same as '#define SIZE 100’ in C/C++
        data instruction
db, dw, dd, dq, dt
L1 db 0
L2 dw 1000
L3 dd 11010b ;L3 2 11010
resb, resw, resd, resq, rest
L1 resb 1 ;L1 1
L2 times 100 db 0 ; 100 db 0
L3 resw 100 ;100 ( X)
    stack
push, pop
subprogram_label:
push ebp
mov ebp, esp
;
;subprogram code
;
pop ebp
ret
pusha,popa
80x86에서는
PUSHA와 POPA 명령을 이용하여,
EAX, EBX, ECX, EDX, ESI, EDI, EBP 레지스터의 값들을 모두 스택에 push 할 수 있게 한다.
CALL, RET
call subprogram_label
;
ret
subprogram_label 다음 코드 주소를 push한 후 분기
ret은 분기하기 전에 저장한 다음 코드 주소로 jmp
ENTER,LEAVE
enter 0,0 ;c
; ; 0
leave
stack fram일을 처리하는 코드
EXTERN, GLOBAL
externd을 통해 외부의 모듈의 global 라벨들을 사용할 수 있다.
global get_int, print_sum
extern get_int, print_sum
LEA
lea eax,[ebp-8]
위 코드는 'ebp-8’의 주소를 가지고 eax에 전달하여 준다.
( [ebp-8]이 'ebp-8’의 값을 가르키는 것이 아니다. LEA 명령은 절대로 메모리를 읽어드리지 않는다.
  오직 다른 명령이 읽어들일 주소값을 계산하고, 이를 첫 번째 레지스터 피연산자에 저장할 뿐이다.
  따라서 별도로 메모리 크기를 지정할 필요가 없다. )
SETxx
setxx 명령은 특별한 경우에서 분기를 이용하지 않을 수 있는 방법을 제공한다.
setxx는 FLAGS의 상태에 따라 바이트 레지스터나 메모리의  값을 0 or 1 로 바꾸어 준다.
SETxx의 조건이 참이라면 그 결과는 1, 거짓이면 0이 저장된다.
setz al ;Z 1, 0 al
CMC
Complement Carry Flag, CF값을 1의 보수로 바꾸어 주는 명령어
CF값이 1이면 0으로, 0이면 1로 바꾸는 코드이다.
CBW CWD CDQ
C는 convert를 B W D Q 는 Byte Word Dword Qword를 의미한다.
CBW같은 경우 Convert Byte to Word로
부호가 있는 비트정보를 확장할 때 사용한다.

CBW - AL의 데이터를 AX로 확장한다.

CWD - AX의 데이터를 DX : AX에 걸쳐 저장한다.

CDQ - EAX의 데이터를 EDX : EAX에 걸쳐 저장한다.

CWD를 DX:AX로 확장할 필요가 없지 CWD는 16비트 때부터 있던 명령어로
그때 사용하던 방법이 x86까지 그대로 이용되는 것이다.